//
//  MediaSource.swift
//  VPai
//
//  Created by devel on 16/9/13.
//  Copyright © 2016年 viatech. All rights reserved.
//

import Foundation
import Async
//import FBSDKShareKit
import SwiftyJSON

//base class
class MediaSource: NSObject {
//    private override init(){
//        
//    }
//    
//    var mediaList : [MediaFile]{
//        return self.mediaFilelist
//    }
//    
//    final func registListener(listener : MediaSourceListener){
//        objc_sync_enter(self)
//        listeners.registerListener(listener)
//        objc_sync_exit(self)
//    }
//    
//    final func unregistListener(listener : MediaSourceListener){
//        objc_sync_enter(self)
//        listeners.unregisterListener(listener)
//        objc_sync_exit(self)
//    }
//    
//    final func callMediaListChange(){
//        objc_sync_enter(self)
//        dispatch_async(dispatch_get_main_queue(), {
//            self.listeners.foreach(){(l: MediaSourceListener, index: Int) in
//                l.onMediaListChange(self.mediaFilelist)
//            }
//        })
//        objc_sync_exit(self)
//    }
//    
//    final func callMediaStatusChage(file: MediaFile) {
//        objc_sync_enter(self)
//        dispatch_async(dispatch_get_main_queue(), {
//            self.listeners.foreach(){(l: MediaSourceListener, index: Int) in
//                l.onMediaStatusChage(file)
//            }
//        })
//        objc_sync_exit(self)
//    }
//    
//    func canDownload() -> Bool{
//        return false
//    }
//    
//    func canShare() -> Bool {
//        return false
//    }
//    
//    func canUploadVpai() -> Bool {
//        return false
//    }
//    
//    func refresh(cb: (() -> ())? = nil){
//        
//    }
//    
//    func deleteMedia(list: [MediaFile], cb: ((success: Bool) -> ())? = nil){
//        
//    }
//    
//    func download(list: [MediaFile], cb: (() -> ())? = nil){
//        
//    }
}
//    
//    func share(vc: UIViewController, list: [MediaFile], type: ShareType){
//        
//    }
//    
//    /*static func showShareListAct(vc:UIViewController, list:[MediaFile]){
//        var uploadfiles:[UploadFile] = []
//        let webpath = OSSManager.DOWN_URL + "/"
//        for item in list {
//            let file = UploadFile(filename: item.path.substringFromIndex(webpath.endIndex))
//            uploadfiles.append(file)
//        }
//        
//        showShareListAct(vc, list:uploadfiles)
//    }*/
//    
//    static func showShareListAct(vc:UIViewController, list:[UploadFile]){
//        var items:[NSURL] = []
//        for file in list{
//            let str = "http://share.720vpai.com/share.html?url=\(file.filename)"
//            items.append(NSURL(string: str)!)
//        }
//        
//        let actView =
//            UIActivityViewController(activityItems: items, applicationActivities: nil)
//        //要排除的分享按钮，不显示在分享框里
//        actView.excludedActivityTypes = [UIActivityTypeMail,UIActivityTypeCopyToPasteboard,
//                                         UIActivityTypePrint,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]
//        //显示分享视图
//        vc.presentViewController(actView, animated:true, completion:nil)
//    }
//    
//    private var mediaFilelist : [MediaFile] = []
//    private var listeners = ListenerList()
//}
//
//class LocalMediaSource : MediaSource, FBSDKSharingDelegate {
//    
//    //单例模式
//    class var shareInstance : LocalMediaSource{
//        struct Static {
//            static var instance: LocalMediaSource?
//            static var token: dispatch_once_t = 0
//        }
//        
//        dispatch_once(&Static.token){
//            Static.instance = LocalMediaSource()
//        }
//        return Static.instance!
//    }
//    
//    private static let TAG = "LocalMediaSource"
//    var toViewCtrl : UIViewController?
//    private override init(){
//        super.init()
//        refresh(nil)
//    }
//    
//    override func canDownload() -> Bool{
//        return false
//    }
//    
//    override func canShare() -> Bool {
//        return true
//    }
//    
//    override func canUploadVpai() -> Bool {
//        return true
//    }
//    
//    override func refresh(cb: (() -> ())? = nil) {
//        super.refresh(cb)
//        var list : [MediaFile] = []
//        Async.background{
//            let vpaiPath = "\(VPaiConfig.PATH_DOCUMENTS)\(VPaiConfig.PATH_VPAI)"
//            list = self.getMediaFiles(vpaiPath)
//            list.sortInPlace({s1, s2 in s1.name2Time > s2.name2Time })
//        }.main{
//            self.mediaFilelist = list
//            self.callMediaListChange()
//            cb?()
//        }
//    }
//    
//    override func deleteMedia(list: [MediaFile], cb: ((success: Bool) -> ())? = nil) {
//        super.deleteMedia(list, cb: cb)
//        var success = true
//        Async.background{
//            for file in list {
//                success = success && FileUtil.deleteFile(file.path)
//                //如果是视频文件，还需删除缩略图
//                if file.type == MediaType.VIDEO {
//                    let thumbnaipath = "\(VPaiConfig.PATH_DOCUMENTS)\(VPaiConfig.PATH_THUMBNAIL)/\(file.nameWithExt)"
//                    FileUtil.deleteFile(thumbnaipath)
//                }
//            }
//        }.main{
//            cb?(success: success)
//            self.refresh(nil)
//        }
//    }
//    
//    override func download(list: [MediaFile], cb: (() -> ())? = nil){
//        super.download(list, cb: cb)
//        Log.error(LocalMediaSource.TAG, msg: "LocalMediaSource should not use download")
//    }
//    
//    override func share(vc: UIViewController, list: [MediaFile], type: ShareType){
//        super.share(vc, list: list, type: type)
//        
//        var fileType = MediaType.UNKNOWN
//        for file in list {
//            if fileType != file.type && fileType != MediaType.UNKNOWN{
//                fileType = MediaType.UNKNOWN
//                break
//            }
//            fileType = file.type
//        }
//        if fileType == MediaType.UNKNOWN || list.count <= 0 {
//            Toast.showToast("not support share type".i18n)
//            return
//        }
//        
//        if type == ShareType.FACKBOOK {
//            //facebook 分享先将图片或视频保存到系统相册，然后打开facebook应用，用户手动选择系统相册进行分享
//            if fileType == MediaType.IMAGE {
//                let sb = UIStoryboard(name: "Share", bundle: nil)
//                let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
//                if let facebook = sb.instantiateViewControllerWithIdentifier("facebook_share") as? FacebookShareCtrl,
//                    let fromVC = appDelegate.window?.rootViewController{
//                    facebook.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
//                    facebook.shareList = list
//                    facebook.hidesBottomBarWhenPushed = true
//                    fromVC.presentViewController(facebook, animated: true, completion: nil)
//                }
//            }else if fileType == MediaType.VIDEO {
//                //裁剪视频后分享
//                let actView = VideoClipViewController.create()
//                actView.videoFile = list[0]
//                actView.toViewCtrl = vc
//                actView.shareType = ShareType.FACKBOOK
//                actView.clipCallBack = {outfile in
//                    if let out = outfile {
//                        let file = MediaFile(type: MediaType.VIDEO, path: out, size: 0, time: 0)
//                        let sb = UIStoryboard(name: "Share", bundle: nil)
//                        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
//                        if let facebook = sb.instantiateViewControllerWithIdentifier("facebook_share") as? FacebookShareCtrl,
//                            let fromVC = appDelegate.window?.rootViewController{
//                            facebook.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
//                            facebook.shareList = [file]
//                            facebook.hidesBottomBarWhenPushed = true
//                            fromVC.presentViewController(facebook, animated: true, completion: nil)
//                        }
//                    }
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }
//        }else if type == ShareType.SYSTEM{
//            if fileType == MediaType.IMAGE {
//                var items : [NSURL] = []
//                for file in list {
//                    let url = NSURL(fileURLWithPath: file.path)
//                    items.append(url)
//                }
//                let actView : UIActivityViewController =
//                    UIActivityViewController(activityItems: items, applicationActivities: nil)
//                actView.excludedActivityTypes = ["com.apple.UIKit.activity.Open.Copy.com.sina.weibo",
//                                                 "com.apple.UIKit.activity.Open.Copy.com.alipay.iphoneclient",
//                                                 "com.apple.UIKit.activity.PostToFacebook"]
//                actView.completionWithItemsHandler = {result, success, items, error in
//                    actView.completionWithItemsHandler = nil
//                }
//                vc.presentViewController(actView, animated: true, completion: nil)
//            }else if fileType == MediaType.VIDEO {
//                //裁剪视频后分享
//                let actView = VideoClipViewController.create()
//                actView.videoFile = list[0]
//                actView.toViewCtrl = vc
//                actView.shareType = ShareType.SYSTEM
//                actView.clipCallBack = {outfile in
//                    if let out = outfile {
//                        var items : [NSURL] = []
//                        let url = NSURL(fileURLWithPath: out)
//                        items.append(url)
//                        let actView : UIActivityViewController =
//                            UIActivityViewController(activityItems: items, applicationActivities: nil)
//                        actView.excludedActivityTypes = ["com.apple.UIKit.activity.Open.Copy.com.sina.weibo",
//                                                        "com.apple.UIKit.activity.Open.Copy.com.alipay.iphoneclient",
//                                                        "com.apple.UIKit.activity.PostToFacebook"]
//                        actView.completionWithItemsHandler = {result, success, items, error in
//                            actView.completionWithItemsHandler = nil
//                        }
//                        vc.presentViewController(actView, animated: true, completion: nil)
//                    }
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }
//        }else if type == ShareType.VPAI {
//            if !CloudConfig.curUser().isAccountAvaliable() {
//                Toast.showToast("loginFirst".i18n)
//                return
//            }
//            
//            if fileType == MediaType.IMAGE {
//                let actView = PhotoSubmitViewCtrl.create()
//                actView.fileList = list
//                actView.toViewCtrl = vc
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }else if fileType == MediaType.VIDEO {
//                let actView = VideoClipViewController.create()
//                actView.videoFile = list[0]
//                actView.toViewCtrl = vc
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }
//        }else if type == ShareType.WEIXIN_FRIEND {
//            if !CloudConfig.curUser().isAccountAvaliable() {
//                Toast.showToast("loginFirst".i18n)
//                return
//            }
//            
//            if fileType == MediaType.IMAGE {
//                let actView = PhotoSubmitViewCtrl.create()
//                actView.fileList = list
//                actView.toViewCtrl = vc
//                actView.uploadDoneCallBack = {uploadfiles, description in
//                    var items:[String] = []
//                    for file in uploadfiles{
//                        let str = "http://share.720vpai.com/share.html?url=\(file.filename)"
//                        items.append(str)
//                    }
//                    WXManager.shareInstance.shareImageUrl(items[0], title: "vpai".i18n, des: description, thumb: uploadfiles[0].filethumb!, friend: true)
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            } else if fileType == MediaType.VIDEO {
//                let actView = VideoClipViewController.create()
//                actView.videoFile = list[0]
//                actView.toViewCtrl = vc
//                actView.uploadDoneCallBack = {uploadfiles, description in
//                    var items:[String] = []
//                    for file in uploadfiles{
//                        let str = "http://share.720vpai.com/share.html?url=\(file.filename)"
//                        items.append(str)
//                    }
//                    WXManager.shareInstance.shareVideoUrl(items[0], title: "vpai".i18n, des: description, thumb: uploadfiles[0].filethumb!, friend: true)
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }
//        }else if type == ShareType.PENGYOUQUAN {
//            if !CloudConfig.curUser().isAccountAvaliable() {
//                Toast.showToast("loginFirst".i18n)
//                return
//            }
//            
//            if fileType == MediaType.IMAGE {
//                let actView = PhotoSubmitViewCtrl.create()
//                actView.fileList = list
//                actView.toViewCtrl = vc
//                actView.uploadDoneCallBack = {uploadfiles, description in
//                    var items:[String] = []
//                    for file in uploadfiles{
//                        let str = "http://share.720vpai.com/share.html?url=\(file.filename)"
//                        items.append(str)
//                    }
//                    //朋友圈只需要title
//                    WXManager.shareInstance.shareImageUrl(items[0], title: description, des: "", thumb: uploadfiles[0].filethumb!, friend: false)
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            } else if fileType == MediaType.VIDEO {
//                let actView = VideoClipViewController.create()
//                actView.videoFile = list[0]
//                actView.toViewCtrl = vc
//                actView.uploadDoneCallBack = {uploadfiles, description in
//                    var items:[String] = []
//                    for file in uploadfiles{
//                        let str = "http://share.720vpai.com/share.html?url=\(file.filename)"
//                        items.append(str)
//                    }
//                    //朋友圈只需要title
//                    WXManager.shareInstance.shareVideoUrl(items[0], title: description, des: "", thumb: uploadfiles[0].filethumb!, friend: false)
//                }
//                vc.navigationController?.pushViewController(actView, animated: true)
//            }
//        }else {
//            Toast.showToast("not support share type".i18n)
//        }
//    }
//    
//    func sharer(sharer: FBSDKSharing!, didCompleteWithResults results: [NSObject : AnyObject]!){
//        Log.info(LocalMediaSource.TAG, msg: "didCompleteWithResults:\(results)")
//        Toast.showToast("share fackbook success".i18n)
//    }
//    
//    func sharer(sharer: FBSDKSharing!, didFailWithError error: NSError!){
//        Log.error(LocalMediaSource.TAG, msg: "didFailWithError:\(error)")
//        Toast.showToast("share fackbook fail".i18n)
//    }
//    
//    func sharerDidCancel(sharer: FBSDKSharing!){
//        Log.info(LocalMediaSource.TAG, msg: "sharerDidCancel:\(sharer)")
//    }
//    
//    private func getMediaFiles(dir: String) -> [MediaFile]{
//        var list : [MediaFile] = []
//        let fileManager = NSFileManager.defaultManager()
//        do{
//            var contents = try fileManager.contentsOfDirectoryAtPath(dir)
//            contents.sortInPlace()
//            for name in contents{
//                let type = MediaFile.getMediaType(name)
//                if type != MediaType.UNKNOWN {
//                    let path = "\(dir)/\(name)"
//                    var size = 0
//                    var time : Double = 0
//                    let attr = try fileManager.attributesOfItemAtPath(path)
//                    if let fileSize = attr[NSFileSize] as? Int{
//                        size = fileSize
//                    }
//                    if let date = attr[NSFileCreationDate] as? NSDate {
//                        time = date.timeIntervalSince1970
//                    }
//                    let file = MediaFile(type: type, path: path, size: size, time: time)
//                    //如果是视频文件，获取缩略图路径
//                    if file.type == MediaType.VIDEO {
//                        let thumbnaipath = "\(VPaiConfig.PATH_DOCUMENTS)\(VPaiConfig.PATH_THUMBNAIL)/\(name)"
//                        if FileUtil.isFileExisted(thumbnaipath) {
//                            file.thumbnailurl = thumbnaipath
//                        }
//                    }
//                    list.append(file)
//                }
//            }
//        }catch{
//            Log.error(LocalMediaSource.TAG, msg: "getMediaFiles error:\(error)")
//        }
//        return list
//    }
//}
//
//class RemoteMediaSource: MediaSource, HttpDownloadDelegate{
//    
//    //用来保存正在下载的task和file，每次下载时均需加入到此map中，
//    //当刷新列表时，可以HttpDownloadManager重新生成此map
//    private var downloadMap : [DownloadTask:MediaFile] = [:]
//    
//    override init(){
//        super.init()
//    }
//    
//    override func canDownload() -> Bool{
//        return true
//    }
//    
//    override func canShare() -> Bool {
//        return false
//    }
//    
//    override func refresh(cb: (() -> ())? = nil) {
//        super.refresh(cb)
//        weak var weakself = self
//        VPaiCtrlWebSocket.shareInstance.getFileList{args in
//            if args.ret == 0{
//                let json = args.json
//                var l : [MediaFile] = []
//                weakself?.downloadMap.removeAll()
//                if let list = json["list"].array {
//                    for iter in list {
//                        let file = MediaFile.parseFromJson(iter)
//                        
//                        if let device = VPaiConnectionManager.shareInstance.currentConnectVPai {
//                            if device.type == "usb" { // 通过usb连接，替换端口
//                                file.path = file.path.stringByReplacingOccurrencesOfString(":8721", withString: ":\(device.ctrlport)")
//                            }
//
//                        }
//                        
//                        if file.type != MediaType.UNKNOWN {
//                            l.append(file)
//                            if let task = HttpDownloadManager.shareInstance.getDownloadTaskByDownloadurl(file.path) {
//                                task.delegate = weakself
//                                weakself?.downloadMap[task] = file
//                                file.downloading = true
//                            }
//                        }
//                    }
//                }
//                l.sortInPlace({s1, s2 in s1.name2Time > s2.name2Time })
//                weakself?.mediaFilelist = l
//                weakself?.callMediaListChange()
//            }
//            cb?()
//        }
//    }
//    
//    /// 删除远端外设文件
//    override func deleteMedia(list: [MediaFile], cb: ((success: Bool) -> ())? = nil) {
//        super.deleteMedia(list, cb: cb)
//        weak var weakself = self
//        VPaiCtrlWebSocket.shareInstance.deleteFile(list){args in
//            cb?(success: args.ret == 0)
//            if args.ret == 0 {
//                weakself?.refresh()
//            }
//        }
//    }
//    
//   }
//
//
//
//
//class CloudMediaSource : MediaSource{
//    
//    private static let TAG = "CloudMediaSource"
//    
//    override init(){
//        super.init()
//    }
//    
//    override func canDownload() -> Bool{
//        return false
//    }
//    
//    override func canShare() -> Bool {
//        return true
//    }
//    
//    override func refresh(cb: (() -> ())? = nil) {
//        let user = CloudConfig.curUser()
//        if !user.isAccountAvaliable(){
//            cb?()
//            return
//        }
//        weak var weakself = self
//        OSSManager.shareInstance.getFileList(String(user.authorid), callback: {args in
//            if args.ret == 0{
//                let list = args.list
//                var l : [MediaFile] = []
//                if let jsons = SwiftyJSON.JSON(list).array {
//                    for json in jsons{
//                        let file = MediaFile.parseFromAnyJson(json)
//                        Log.info(CloudMediaSource.TAG, msg: "file:\(file.path)")
//                        if file.type != MediaType.UNKNOWN && file.path.containsString("_thumb.jpg") == false{
//                            l.append(file)
//                        }
//                        l.sortInPlace({s1, s2 in s1.name2Time > s2.name2Time })
//                    }
//                }
//                weakself?.mediaFilelist = l
//                weakself?.callMediaListChange()
//            }
//            cb?()
//        })
//    }
//    
//    override func deleteMedia(list: [MediaFile], cb: ((success: Bool) -> ())? = nil) {
//        weak var weakself = self
//        var count = list.count
//        var deleted = false
//        for file in list{
//            OSSManager.shareInstance.deleteFileAsync(file.path,callback: {args in
//                if  args.ret == 0 {
//                    deleted = true
//                }
//                count -= 1
//                if count == 0{
//                    if deleted == true {
//                        weakself?.refresh()
//                        cb?(success: true)
//                    }else{
//                        cb?(success: false)
//                    }
//                }
//            })
//        }
//        
//        for file in list {
//            if let thumbnailurl = file.thumbnailurl {
//                OSSManager.shareInstance.deleteFileAsync(thumbnailurl) {args in
//                    
//                }
//            }
//        }
//    }
//    
//
//}
//
//
//protocol MediaSourceListener: NSObjectProtocol {
//    //列表发生变化，如数量变化
//    func onMediaListChange(list: [MediaFile])
//    //media内容发生变化，如下载状态更变
//    func onMediaStatusChage(file: MediaFile)
//}